package cn.chen.数据结构.链表;

import java.util.Random;

/**
 * 解决丢手绢问题，利用单向环形链表，或者环形队列
 * */
public class JosephuTest {

    public static void main(String[] args){

        LoopLinkedList list=new LoopLinkedList();



        // 约瑟夫为题  n=10，k随机产生一个，m=4;
        for(int i=1;i<=10;i++){

            list.insertNode(new HeroNode(i,i+"chen",i+"wan"));
        }
        Random r=new Random();
        int k = r.nextInt(10)+1;

        System.out.println(k);
        int m=4;

        HeroNode head = list.getHead();
        HeroNode temp=head;
        while (true){

            if(temp.no==k)  // 将temp定位到开始的节点
                break;
            temp=temp.next;
        }

        // 循环遍历找到约瑟夫问题的输出顺序
        while(m-->0){

            if(temp.next==temp){    // 只有一个节点了，直接输出

                System.out.println(temp);
                break;
            }
            if(m==1){   // 因为m--是写在while条件中的，所以在m=2的时候进如while判断，判断完之后m=1了，所以到这里的时候就是m=1了，但是temp还是指向的要删除的元素的前一个元素

                System.out.println(temp.next);
                temp.next=temp.next.next;
                m=4;
            }
            temp=temp.next;
        }


    }
}
